// 人体红外传感器，形状像半个足球

const int pirPin = 2; // 定义人体红外感应模块连接的引脚 
int pirState = LOW; // 记录人体感应状态，初始为LOW 
int val = 0; // 用于存储读取的引脚值 
const int buzzerPin = 4; // 定义有源蜂鸣器连接的引脚 
 
void setup() { 
  pinMode(pirPin, INPUT); // 将连接人体红外感应模块的引脚设置为输入模式 
  pinMode(buzzerPin, OUTPUT); // 将连接蜂鸣器的引脚设置为输出模式 
  Serial.begin(9600);  // 初始化串口通信，波特率为9600 
} 
 
void loop() { 
  val = digitalRead(pirPin); // 读取人体红外感应模块引脚的值 
  if (val == HIGH) { // 如果检测到高电平，说明检测到人体 
    digitalWrite(buzzerPin, HIGH); // 向蜂鸣器引脚输出高电平，使蜂鸣器发声 
    delay(5000); // 持续发声1秒 
    if (pirState == LOW) { 
      Serial.println("Motion  detected!"); // 输出检测到人体的信息 
      pirState = HIGH; // 更新人体感应状态 
    } 
  } else { // 如果检测到低电平，说明未检测到人体 
    digitalWrite(buzzerPin, LOW); // 向蜂鸣器引脚输出低电平，使蜂鸣器停止发声 
    // delay(1000); // 停止发声1秒 
    if (pirState == HIGH) { 
      Serial.println("Motion  ended!"); // 输出人体离开的信息 
      pirState = LOW; // 更新人体感应状态 
    } 
  } 
  delay(100); // 延迟100毫秒，避免过于频繁读取数据 
} 